/**
 * 
 * 功能说明:菜单管理
 * 
 * @author ZHONGFUHUA
 * 
 * @Date 2016年10月25日
 * 
 */
var sysMenuApp = angular.module("sysMenuApp", [ "ngSanitize", "ui.select", "commonApp", "sysServiceApp", "ngJsTree" ]);

sysMenuApp.controller("sysMenuCtrl",[
		"$scope",
		"commonService",
		"sysService",
		"$timeout",
		"$log",
		function($scope, commonService, sysService, $timeout, $log) {

			// 查询权限条件
			$scope.queryPrivilegeParams = {
				privCatalogId : null
			};
			
			// 提交菜单对象
			$scope.submitMenu = {
				menuPath : null,
				menuName : null,
				privId : null,
				menuParent : null

			};
			$scope.action = null;

			// 表格对象
			$scope.$menuTable = $('#menuTable');
			$scope.$parentMenuTable = $('#parentMenuTable');
			$scope.$privTable = $('#privTable');
			
			// 按钮对象
			$scope.$addButton = $('#addButton');
			$scope.$modButton = $('#modButton');
			$scope.$removeButton = $('#removeButton');
			
			// 模态框对象
			$scope.$selectPrivilegeModal = $('#selectPrivilegeModal');
			$scope.$selectParentMenuModal = $('#selectParentMenuModal');
			$scope.$menuEditModal = $('#menuEditModal');
			
			// 表格选中实例对象
			$scope.privilegeSelections = null;
			$scope.parentMenuselections = null;

			// 监视isSucce的状态
			$scope.isSuccess = true;
			$scope.error = null;
			
			ffc.util.watchResult($scope, $timeout);	
			
			
			/**
			 * 
			 * 功能说明:每次选择时重新获取表格中被选中对象
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.$menuTable.on('check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table',
				function() {
					$scope.$removeButton.prop('disabled',!$scope.$menuTable.bootstrapTable('getSelections').length);
					$scope.$modButton.prop('disabled',!$scope.$menuTable.bootstrapTable('getSelections').length);
					$scope.getSelections();
				}
			);
			
			/**
			 * 
			 * 功能说明:每次选择时重新获取表格中被选中对象
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.$privTable.on('check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table',
				function() {
					$scope.getPrivilegeSelections();
				}
			);
			
			
			/**
			 * 
			 * 功能说明:每次选择时重新获取表格中被选中对象
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.$parentMenuTable.on('check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table',
				function() {
					$scope.parentMenugetSelections();
				}
			)
			
			
			/**
			 * 
			 * 功能说明:获取表格中被选中的对象
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.parentMenugetSelections = function() {
				$scope.parentMenuselections = [];
				$scope.parentMenuselectionIds = [];
				return $.map($scope.$parentMenuTable.bootstrapTable('getSelections'),
						function(row) {
							$scope.parentMenuselectionIds.push(row.id);
							$scope.parentMenuselections.push(row);
							return row;
						}
				);
			}
							
			
			/**
			 * 
			 * 功能说明:获取表格中被选中的对象
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.getPrivilegeSelections = function() {
				$scope.privilegeSelections = [];
				$scope.privilegeSelectionIds = [];
				return $.map($scope.$privTable.bootstrapTable('getSelections'),
						function(row) {
							$scope.privilegeSelectionIds.push(row.id);
							$scope.privilegeSelections.push(row);
							return row;
						}
				);
			}
							
			/**
			 * 
			 * 功能说明:获取表格中被选中的对象
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.getSelections = function() {
				$scope.selections = [];
				$scope.selectionIds = [];
				return $.map($scope.$menuTable.bootstrapTable('getSelections'),
						function(row) {
							$scope.selectionIds.push(row.id);
							$scope.selections.push(row);
							return row;
						}
				);
			}
							
			/**
			 * 
			 * 功能说明:权限目录树配置
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.privCatalogTreeConfig = {
					config : {
					},
					types : {
						'default' : {
							icon : "glyphicon glyphicon-folder-open"
						},
						'catalog' : {
							icon : "glyphicon glyphicon-file"
						}
					},
					events : {
						selectNode : function(e, data) {
							$scope.queryPrivilegeParams.privCatalogId = data.selected[0];
							$scope.$privTable.bootstrapTable("selectPage", 1);
						}
					},
					icons : true,
					multiple : false,
					animation : 200,
					status : '',
					search : "",
					selected : [],
					plugins : [],
					data : []
			}
							
			/**
			 * 
			 * 功能说明:权限目录树初始化
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.initPrivTree = function() {
				sysService.queryrolePrivCatalogTree({"children" : []},
					function(data) {
						if (data.result) {
							$scope.privCatalogTreeConfig.data = data.dataList;
						}
					}
				);
			}



			/**
			 * 
			 * 功能说明:选中所属权限
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.selectPrivilege = function() {
				if ($scope.privilegeSelections == null) {
					$scope.submitMenu.privId = null;
					$scope.privName = null;
				} else {
					$scope.submitMenu.privId = $scope.privilegeSelections[0].id;
					$scope.privName = $scope.privilegeSelections[0].privilegeName;
				}
				$scope.$selectPrivilegeModal.modal("hide");

			};
			
			/**
			 * 
			 * 功能说明:选中上级目录
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.selectParentMenu = function() {
				if ($scope.parentMenuselections == null) {
					$scope.submitMenu.menuParent = null;
					$scope.parentMenuName = null;
				} else {
					$scope.submitMenu.menuParent = $scope.parentMenuselections[0].id;
					$scope.parentMenuName = $scope.parentMenuselections[0].menuName;
				}
				$scope.$selectParentMenuModal.modal("hide");
			};
			
			/**
			 * 
			 * 功能说明:添加目录
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.addMenu = function() {
				if ($scope.action == "modmenu") {
					sysService.updateMenu($scope.submitMenu,
						function(result) {
							if (!result.result) {
								$scope.error = result.msgTitle;
								$scope.isSuccess = false;
								return false;
							}
							new MessageDialog().success("修改成功！！");
							$scope.$menuEditModal.modal("hide");
							$scope.$menuTable.bootstrapTable("selectPage", 1);
						},function(error) {
							$scope.error = error;
							$scope.isSuccess = false;
						}
					);
				} else {
					sysService.saveMenu($scope.submitMenu,
						function(result) {
							if (!result.result) {
								$scope.error = result.msgTitle;
								$scope.isSuccess = false;
								return false;
							}
							new MessageDialog().success("添加成功！！");
							$scope.$menuEditModal.modal("hide");
							$scope.$menuTable.bootstrapTable("selectPage",1);
							$scope.isSuccess = true;
						},function(error) {
							$scope.error = error;
							$scope.isSuccess = false;
						}
					);
				}
			};

			/**
			 * 
			 * 功能说明:删除菜单
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.deleteMenus = function() {
				new MessageDialog().deletion("确定删除？",
					function() {
						sysService.deleteMenus($scope.selections,
							function(result) {
								if (!result.result) {
									$scope.error = result.msgTitle;
									$scope.isSuccess = false;
									return false;
								}
								new MessageDialog().success("删除成功！！");
								$scope.$menuTable.bootstrapTable("selectPage",1);
								$scope.$removeButton.prop('disabled',true);
								$scope.$modButton.prop('disabled',true);
							},function(error) {
								$scope.error = error;
								$scope.isSuccess = false;
							}
						);
					}
				);
			};

			/**
			 * 
			 * 功能说明:弹出框关闭事件
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.$menuEditModal.on("hidden.bs.modal",
				function() {
					$scope.submitMenu = {};
					$scope.privName = null;
					$scope.parentMenuName = null;
					$scope.action = null;
					$scope.queryPrivilegeParams.privCatalogId = null;
				}
			);

			/**
			 * 
			 * 功能说明:弹出框打开事件
			 * 
			 * @author ZHONGFUHUA
			 * 
			 * @Date 2016年10月25日
			 * 
			 */
			$scope.$menuEditModal.on('shown.bs.modal', 
				function() {
					$scope.initPrivTree();
					$scope.$parentMenuTable.bootstrapTable("selectPage", 1);
					$scope.$privTable.bootstrapTable("selectPage", 1);
					if ($scope.action == "modmenu") {
						$scope.submitMenu = angular.copy($scope.selections[0]);
						$scope.parentMenuName = $scope.submitMenu.parentName;
						$scope.privName = $scope.submitMenu.privName;
						ffc.util.angularApply($scope, $timeout);;
					}
				}
			);
			
			$(function() {
				/**
				 * 
				 * 功能说明:父菜单表单
				 * 
				 * @author ZHONGFUHUA
				 * 
				 * @Date 2016年10月25日
				 * 
				 */
				$scope.$parentMenuTable.bootstrapTable({
					queryParams : function(params) {
						var selfParams = {
							"children" : []
						};
						return $.extend({}, params, selfParams);
					},
					ajax : function(render) {
						sysService.queryMenuData(render.data, function(result) {
								if(!result.result){
									$scope.error = result.msgTitle;
									$scope.isSuccess = false;
									return;
								}
								ffc.util.loadTableData(render, result);
							},function(error) {
								$scope.error = error;
								$scope.isSuccess = false;
							}
						);
					}
				});
				
				/**
				 * 
				 * 功能说明:权限表单
				 * 
				 * @author ZHONGFUHUA
				 * 
				 * @Date 2016年10月25日
				 * 
				 */
				$scope.$privTable.bootstrapTable({
					queryParams : function(params) {
						var selfParams = {
							"children" : []
						};
						if ($scope.queryPrivilegeParams.privCatalogId != null) {
							selfParams.children.push({
								"name" : "privCatalogId",
								"value" : $scope.queryPrivilegeParams.privCatalogId
							});
						}
						return $.extend({}, params, selfParams);
					},
					ajax : function(render) {
						if (!$scope.queryPrivilegeParams.privCatalogId) {
							ffc.util.loadTableData(render);
						} else {
							sysService.queryPrivDataByMap(render.data, function(result) {
									if(!result.result){
										$scope.error = result.msgTitle;
										$scope.isSuccess = false;
										return;
									}
									ffc.util.loadTableData(render, result);
								},function(error) {
									$scope.error = error;
									$scope.isSuccess = false;
								}
							);
						}
					}
				});
				
				/**
				 * 
				 * 功能说明:菜单表单
				 * 
				 * @author ZHONGFUHUA
				 * 
				 * @Date 2016年10月25日
				 * 
				 */
				$scope.$menuTable.bootstrapTable({
					queryParams : function(params) {
						var selfParams = {
							"children" : []
						};
						return $.extend({}, params, selfParams);
					},
					ajax : function(render) {
						sysService.queryMenuData(render.data, function(result) {
								if(!result.result){
									$scope.error = result.msgTitle;
									$scope.isSuccess = false;
									return;
								}
								ffc.util.loadTableData(render, result);
							},function(error) {
								$scope.error = error;
								$scope.isSuccess = false;
							}
						);
						$scope.$removeButton.prop('disabled', true);
						$scope.$modButton.prop('disabled', true);
					}
				});
			
				$scope.initPrivTree();
			
			});
}]);
